{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "这个作业中，我们使用tensorflow来实现一个简单的手写数字识别的网络，并用这个网络来做个 简单的识别示例。\n",
    "\n",
    "本作业中，需要参与者应用视频中学到的知识：dropout，learingratedecay，初始化等等，将网络最终在validation数据上的得分尽可能的提高。\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From <ipython-input-2-b0ffac263758>:1: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "WARNING:tensorflow:From H:\\anaconda\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please write your own downloading logic.\n",
      "WARNING:tensorflow:From H:\\anaconda\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\base.py:252: _internal_retry.<locals>.wrap.<locals>.wrapped_fn (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use urllib or similar directly.\n",
      "Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.\n",
      "WARNING:tensorflow:From H:\\anaconda\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-images-idx3-ubyte.gz\n",
      "Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.\n",
      "WARNING:tensorflow:From H:\\anaconda\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-labels-idx1-ubyte.gz\n",
      "Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.\n",
      "Extracting ./t10k-images-idx3-ubyte.gz\n",
      "Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.\n",
      "Extracting ./t10k-labels-idx1-ubyte.gz\n",
      "WARNING:tensorflow:From H:\\anaconda\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "(55000, 784)\n",
      "(55000,)\n",
      "(5000, 784)\n",
      "(5000,)\n",
      "(10000, 784)\n",
      "(10000,)\n"
     ]
    }
   ],
   "source": [
    "mnist = input_data.read_data_sets(\"./\")\n",
    "\n",
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到images里面有数量不等的图片，每张图片是28x28长度的一个一维向量， 所以用的时候需要先给它还原成28x28的二维图片。labels中则是图片对应的数字的值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAd0AAAHiCAYAAACtERYWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3Xd81EX6wPFnUggloStKr6Ep5RR7QQELYu8N9VAUbJyKenr+PM5T76yA2Cgq9nqo2LCCDQURpUgv0kF6D0l2fn8kzHxnzYbNZnc25fN+vXzdM5nZ3Tm+2Tz7ndmZUVprAQAAiZeS7A4AAFBZkHQBAPCEpAsAgCckXQAAPCHpAgDgCUkXAABPSLoAAHhC0g1QSmml1A6l1P1Rtu+nlNpe+LjWie4fSobrWbHEcD2HFLbXSqm0RPcPJVcZ36OKzTEspZQWkTZa64WF5WNF5OOwZjVE5Dyt9TuRHoeyoYjrWV9E3hORdiKSKiJzROQ2rfV3xT0OZUNx10UpdYWIvCAi12itRwd+3lxElohIutY6z09PEa2irqlSKlVEhojIX0UkS0QWisgJWuvNxT2uvODTXzG01t+ISObeslKqu4iMF5FPktUnlMp2KXgjLxARLSJnish4pdT+/EEuv5RSdUTk7yIyO9l9QVwMEZGjRORIEVkmIh1FZHdSexRHDC+XzBUi8rbWekeyO4KS01rv1lrP01qHRESJSL6I1BGRusntGUrpQREZLiLrk90RlE7hB6hBUjBi8bsuMEtrTdKtbJRS1UXkPBEZm+y+oHSUUjOk4JPz+yIyWmu9LsldQoyUUoeJyKEi8kyy+4K4OFhE8kTkPKXUGqXUfKXU9cnuVDwxvBy9c6Xgk/SkZHcEpaO17qSUqioiZ4tIlWT3B7EpnPt7SkRu1FqHlFLJ7hJKr7GI1BKRbBFpISJtROQLpdR8rfVnSe1ZnHCnG70rRORFzTfPKoTCoebXROROpVTnZPcHMRkoIjO01pOT3RHEza7C//2X1nqX1nqGiLwuIr2T2Ke4IulGQSnVRES6i8iLSe4K4i9dRFomuxOISQ8RObtwGHKNFHz55lGl1Igk9wuxm1H4vxX25obh5ehcLiLfa60XJbsjiJ1S6ggp+J2fIgVLhm4SkQYi8mMy+4WYXSkiVQPl/4nI2yIyJim9QalprRcppb4RkbuVUjdJwQfiC0Xk4uT2LH5IutHpKyIPJ7sTKLUMKfiWa0sRyRWRmSJymtZ6VVJ7hZgE122KiCil9ojIVq31liR1CfFxsRR8cNogIutE5B6t9RfJ7VL8MLzsyhGRaUqp+4I/1Fq301r/6dOzUuoqpdTmwseFPPUR0XOup9Z6kta6s9Y6S2tdV2t9vNb6672NuZ5lXpHvz7201t3DNsa4V0R+LXxchR2uLOf+dE211iu11qdorTO11i211s/urasI71F2pAIAwBPudAEA8ISkCwCAJyRdAAA88frt5V4p5zOBnCSfhd6K+3Y9XM/kScT1FOGaJhPv0Yol0vXkThcAAE9IugAAeELSBQDAE5IuAACekHQBAPCEpAsAgCckXQAAPCHpAgDgCUf7AQDKvpRUE84f1dWpmn3yUyY+/YoBJk77Ylri+1VC3OkCAOAJSRcAAE9IugAAeMKcLgCgzElr1sQpz3+wnomXdB8d1rqKiTa3snH9LxLStVLhThcAAE9IugAAeMLwMiqN1A7ZJp47oI5Tt+Ccp00cEvcI0hSxx2I+tbmFicc+1ttpV2/M5Lj0E6is0lo2N/Fvd9d36v48pGxds/xoEzf4Zr2J8+PXtbjhThcAAE9IugAAeMLwMiqUtCaNnfJv9x5g4tdOfNbEXTNCTrtQ4PNnSNy64GfT/rUXmrjhHa84rZ6bcKyJ81asjL7T+JOUqlVN3PRr5dQ91eg7E6cqe23m7NnptLv15L4mzp+3UFA2qXT7beM5/6xr4iU9Iw8nt/z8r065bf/fTBzavSCOvYs/7nQBAPCEpAsAgCckXQAAPKn0c7qrbznKKavAapGqG2xhUzv3cQdOtl9Grzp+SkL6hugsfuhIE8+99EmnLrj8J7j0JxT2efPDnbVMPGV7y4ivdUiNpSY+N3OrU7dqwiwTf9DRXZKEfQvO46583S7N+qDRK0U1FxGR7rPOMrF61F1ikrHol1L3Ka15UxPnLV1W6ufDn80b0dnES3qOitiu9cQrTdym789OXfi3MMoy7nQBAPCEpAsAgCdlcnh53fXukO/mTrkmHnfSiLi+VvsqUyPW7dZ5Jq6VUs2pW3f5DhOvGu7+Mz62ppeJN1xQ08R5y1fE3E9Edn4vu4QkfDcpd/mP/Yz55OZWTrvPTu5o4uKW+3x3+kUmPuOZp5264HKiD6Rb8Z3Gnyz8pz2YfG63JyO2a/PF1SZuO2CeiUM7ljrt3N+E6Mwf6V639056wsQXvnCLU9f0n9/H8ApYOPQIt9znqUDJvkdbfuYuC8ruP9vEsVzbsoI7XQAAPCHpAgDgCUkXAABPysyc7vxRdi5lbu9hTl2GSg+WPPUo/HVd+6fWCMRu3YvNvjbxZW90N/GmS5o67ViCUAqHHWzC6+rZudUPdx7gNAsu/5m1taGJcwbv57Rb9JC9iNn3VXfq8ufYbeWCy8PSn3UvfG5gomnlHe73Ehr9l/m/cPrIzk7560seDpTsNViW527vmN3PLs0K5e4pdT9yex5i4nG93O+MdAxsUYjY7TnF/n0fd9ZQpy5V2aVizrKgq3512ulQWTwzqOS40wUAwBOSLgAAnpSZ4eWnT3jRxOHDuv/d0MbE6/ZkxfT8/5tmh5CajlfFtIzOih7288pDvV916oI7Fb3cfKKJL3u1u9Nu04X2RByWE5XQlJkm7H/uABOnrt7oNHOX/6wx0co73F2n5hxvl4acOuoapy51jo039LO7X+XqaU674PKkZq/87vYjvP+QtXe4Q8P7p9oh5V3a1vUddKvTrnruj3Htx/a/2ffrwVXcvz3bdY6JW7y1wamrGIOdftS7e4mJO1Wp6tT1mnO6ibPvtdciv4IMJ4fjThcAAE9IugAAeFJmhpeHXnieif/RpaZTt/+7dteZ/A3u8GG0siXyzlOxaD3exqOf6+3UrXnd7pB0fe3lJg4ONYuItO1vh0Wb38Pwcqz0VDvUHO0wbtX17p42I7c0N3GVtdudusVD7DeRX7jcDkMHD1AQEZmWYz/Dcoj9vvXP/jZi3dnzzjdx9XGRh5NVmv0TpqpVi9guXP7Bdnrh8fbPR2zXfdpVJt5/9tyonx+umxp9HrFu61g7zVZ7wWQf3Ukq7nQBAPCEpAsAgCckXQAAPCkzc7p6mj1Bop67EqPMfzU/NMOd63n+8T4mvn7I0+HNjVcvsztv3XXPYfHvWCW060z333FjO/srHpzHrTfTnbftX2upibt84C73OSzDPi64LGhqjvuZ9R/97FKjVHEP2UbJZKXvNvGOsLrckw41cd17lpr4jZafluAVJhX50+/Crul+//G3A15Fs+Uye5rQcVV/MfHRM85x2tV+6QdvfSoLuNMFAMATki4AAJ6UmeFlIB5WXejucjTneDu8H1ziE37YfbAuOJwcXhdcFnT52zc47Vp+VfGXO8TTyFGnO+XrbrOHDbzY0q7Ju+77U5x2Y5rZa5omYaeNlNKV469zym0mV66hz3jafEb4xECBne+7h5Jk6sWJ60RK2O9HGdjlijtdAAA8IekCAOAJw8txsOIu9+zUUNdtUT2uQaodCs078RCnLu3LaeHNEYPgt42DnzHdnxdf13/5iSZe/nd7+AbDyaWzo3H4NbCqKXuO7dhmX4bV2iHDW9fYb6t/NKGb0yr3QPv+WnjSqKj6VP/n0h+GggIH1tla5M+rbYh83WOVc6q99uuvsecvH9RgtdNu23n29ypv9RpJBu50AQDwhKQLAIAnJF0AADyp9HO6aS2bO+WF/Q408VMXjYzqObpXdXcfSlXRfZZpnJZp4pHPD3PqBjY7JqrngKvhG1Wc8vmN7LKUg2quMvF19b532jUKHKAe/ll00YPtTVztqylx6CVERLKf/cMpt8+9PqrHtX7JnjQWmrfIxC3y3Dn2xf85MqrnG7jyaBPXfdX9LoUOb4yI0g5o4JRHtX0lUMqU0kqtXcvEZ01e4NRdmDXcxLVSIp821XHEpSZufC5zugAAVGgkXQAAPKk0w8vbzz/cxH/8xX7W+Nc5rzvtLsraFMOzl/6zS8/PBznlbPmp1M9ZGVV7zx3+zXnPxtMC16l/twFOu2332d1zvjz4DafumH/aXYl+ndbExBxUXzr58xc55RZ3LorQMuxxUT5/2s7olv/8NLqLievnsgwsZunpTrFpWumGlNcNdJdinnXtRBP3r7UqrHXkIeWg/bKK3iXLJ+50AQDwhKQLAIAnJF0AADypUHO6qmtHE9ce4W7/9VFzezJJtEt63t1h5yRm7Wocsd0HD3V3yqk5dqHBFf+yp6X8eR7CqrImPWJdZZHWxP03zlu+ImGvpafOdMqZgYNszp/knn4zrvVHJj7oaruUq+k/mdMty1Qxk795gZnhOvNzPPSm4tPb3O1vR25paOLi/val1q9n4uV/bWvimYOeimPvCmzZVdXE+8f92aPDnS4AAJ6QdAEA8KRcDy//PsT9Svk9F9mlHpdmbXDqluXZkyfm7qlj4htfu9ppV321XWZw4MT1Js7/bX7EftSSyAddL/h7YJeWsCGWJbnbTdz8ve1SGe06054SE1yaIyLywe92uuDAs+Z469OWR5o65dAzdrogt80ub/1A6Vx18YSIdecvtFMIqRN/jtgO0cvfvMUpv7bCnvzTv5Zdu3f0HT867brdZw+xvyDzi7j2acgfHZxyw5vskqG8uL5S9LjTBQDAE5IuAACelOvh5drd1jnl4JByj9/OcOpynzjAxMFdi5pL5B1oot35Jlzo+K4mPqv2mECN+xlnYyiwOf8U99u0FVnwW8oXPvixiX/a2txp53NIObiZ+nn/cYclU4SDzcuD1P32c8ptMhZGbLv+6eYmzpLkbHxf0e1+3h4ek/NwrokfPmB63F8rV9u/1h0m9TNx9t/daca835fH/bVLijtdAAA8IekCAOAJSRcAAE/K9ZxuvX7uMpvWt9iTY1oNdudq02SZlz6JiGzKtrueHF018uea/rMuM3F9ibwkqaL5/RK7JCe4lODx6T2ddq0k/nM/xmEHO8VTn//a9qm2OxcYCnw2TZ8f3Wkm8G/LCa2c8unV7dz8du3uOlV1fa4gsWq+apcA/vhvu+PecVWLar1v+Tpk4kN/usSpq/K2XQba8iX7tz9Zy4KKw50uAACekHQBAPCkXA8v5612v+rfanDZ+Or/hm5FD2rM2bPTKWc9VavIdhVdo6/sxujpN6ea+OYuXzrtxtx4monrzXaHB9O+nFbkc6d2yHbKq3rUN3Hmafb346uDX3DaBZcFhcI+i2Z/fK2Nh3xf5Osi+a4Y8n7EuiW57jVN/7zo3x/41+7by02sZmWZuMXw2U47nW+Hl/ffNjfxHUsQ7nQBAPCEpAsAgCckXQAAPCnXc7plxcmztjrlcbWfDJTsVo9XzL7CaVfn46mJ7FbZFdjy8ugZ55j4y4PfcJpdd+cTJg5JyKkbsu6QIp/6jFqvOeWuGfZxKYHPmOHPF/z82fbt652aDg/brePK4hIEFKiXGvmkrkdWnxz2k82J7Qwi6vD0QKfc/EG7La/Os++wWLfhLeu40wUAwBOSLgAAnjC8HAfn1ZzhlKunZJp4fq49NLn6iNre+lRe1L5mj4mHvO8OGT/QwP675mqnSu7b/xcTh8RWhp8IFFz+szbfHkD/1IajnHafjjjaxG3GuLuZMaRc/u0Jpe67ERLm/pZdTNxE3GV3OrxxBcedLgAAnpB0AQDwhOHlGK0baIcnG6S630Jekmu/RXnxA4NNXP9jd9gSInnLV5j419ObOHWt/1v0N5RFROZ0H23i42ZcYOI/NtaM+JjWQ+1AsZ4606mrJ1ybimxU8w+c8iGP/s3ErW79Ibw5kDDc6QIA4AlJFwAAT0i6AAB4wpxulFRGhlM+9zp7Is620B6nrveUASZu+ixzhdHKW7HSKbe6dGWEliJ9xM731pRFgTiyyrY0obK5+/VLnXK7vo/ZON19/0rIXVoG+MKdLgAAnpB0AQDwhOHlaIXcwcmXxp9g4o9/7e7UNX2TJQiAb83+z53KueX/jozYthVLxJAk3OkCAOAJSRcAAE9IugAAeMKcbpR0rrssqPndzAkBAEqGO10AADwh6QIA4InSmn16AADwgTtdAAA8IekCAOAJSRcAAE9IugAAeELSDVBKaaXUDqXU/VG276eU2l74uNaJ7h9KJobr2bPweoaUUj0T3T+UDO/PiieGazqksL1WSpXLfSZIun/WWWt9996CUmqkUmpe4R/iK4MNtdZjtNaZ3nuIkgi/nicqpX5WSm1VSi1WSvXfW6e1/rzwei5LSk8RDd6fFU/4Ne2ilJqmlNpZ+L9d9tZpre8VkY5J6WWckHT37VcRGSgiPye7IygdpVS6iIwTkWdFpJaIXCgijymlOie1YygN3p8ViFKqioi8JyIvi0gdERkrIu8V/rxCIOnug9b6Sa31FyKyO9l9QanVFZGaIvKSLjBVROaISIfkdgux4v1Z4XSXgu2Jh2qtc7TWw0VEiciJSe1VHJF0UWlordeKyGsicpVSKlUpdaSINBORb5PbMwCFOorIDO3u2jRDyvmQclC5nIgGSuE1ERktIsMKywO01suT2B8AVqaIbAn72RYRyUpCXxKCO11UGkqpdiLyhoj0FZEqUvDp+Xal1GlJ7RiAvbZLwRRQUE0R2ZaEviQESReVyUEiMk9rPUFrHdJazxORD0Xk1CT3C0CB2SLSSSmlAj/rVPjzCoGkuw9KqSpKqapSMJmfrpSqqpTi3618mi4ibQqXDSmlVCsR6SMF34BFOcT7s8KZKCL5InKTUipDKXVD4c+/TF6X4otfzn37VER2ichRIjKyMD4uqT1CTLTWi0TkryIyXES2isgkEXlHRMYks18oFd6fFYjWeo+InCUFU0CbpeD9elbhzysEkq4rR0SmKaXu2/sDrXV3rbUK+2+iiIhS6iql1ObCx4WS02UUo6jr+abW+iCtdZbWurHW+g6tdUhERCnVo/B6NpCCT9soW3h/VjxFXdPpWutDtNbVtNZ/0VpP31unlLpXCkamckSkXJ5Ly3m6AAB4wp0uAACekHQBAPDE6+YYvVLOZyw7ST4LvaX23apkuJ7Jk4jrKcI1TSbeoxVLpOvJnS4AAJ6QdAEA8ISkCwCAJyRdAAA8IekCAOAJSRcAAE9IugAAeELSBQDAE5IuAACekHQBAPCEpAsAgCckXQAAPCHpAgDgiddThsqzJa93csrfHv20iS/pe6NTl/rVz176BCCyRY8eYeKbT/nYqfvo4iNNHJox11ufsA9H2L+zS252D+mZf/xYE7eeeKVT1+qSXxLarXjiThcAAE9IugAAeMLwcpT0shpOud6x1Uy8sW2GU7ffV166hDjKOa2biTdes92pm97tlaie47oVx5r42487O3Utn11s4rzVa2LpIvYhrVFDpzzizOdN3KvaLqdu7OG9TVxvRmL7heKtGXSUiR+44TkTn1Rth9MuV9t42GGvO3XDpV2Rz732xqOccsNX7VRC/oaNJe5rPHCnCwCAJyRdAAA8YXg5SjVWqIh1B1z4u1POfybRvUEsVHoVE89/rKtT9+Hpj5u4dbo7XRCK8vmfafyNfcw1Xzt1XQ7ua+LG5zK8nAiLrm3mlMOHlJE8KsO+pzZd8Ben7uvbHjVxdVVFSmvF3+2Q8tTrhzp1b17f2MTDh57r1O33zORSv3Y0uNMFAMATki4AAJ6QdAEA8IQ53TjYlZfulEs/K4FEmPdEFxPPP/0ppy5Fqpo4JFqi0X95d6c8usmkiG2Hd7FLHB6td7yJk7VsoSJqcvSKZHcBESz+p53Hnd13RFhtdH8xn9nc0sTPvnSaU9dIvjdxTj37LYx0leq0uzRrtYm73fmYU3e53GLiRM7vcqcLAIAnJF0AADxheDlKNU9bHbFuyzvuTjj7ye8RWiLRgsuCRNwh5dl9gsNa7rDT6vydJj5u3G1OXctxe0ycscAu98lfv8Fp1/WNS008rdvLTt3Pu5qbWO/JjdB7lNTuPoeZeFjLJ8Jq0wXJE1wmVKPDphI//uOdWU75ndtPMnGjD78Pb15i2WF/K17/+yMmPrnrINvu2qmlfq0g7nQBAPCEpAsAgCckXQAAPGFOtxj53e3X3Md3fNKp+2WPnRNs8Mospy7abQMRf6uvP9Qpzz89OM9nr9mYLU2ddv+7ppeJ23z3Q8TnzyvmtXNyIs8hjl9pD+eutm1JMc+CkthVz17Tg6swh5tMKs1NJ4v+Zf9+/nZo+DKhogWX4a07153TzVgZ3dxq8w/tdzA6NbvSqZt25BgThy8napFmlw3WnJu43yXudAEA8ISkCwCAJwwvFyM/w34myVTuyTO52u5aFNq2zVufULwB/d9zyiliT4d6cEMHE08+I9tpp5b+EtXzp9asaeIVVx/k1N3e6X8mnr7HnWSodjJDysn0XY57f5G1vLiJAsQip6d7ctdvl0U3pHzzqqNNvPY0O6ybv2FVTP1I/epnEzf9yq0bN+9AE1+QuS6m5y8t7nQBAPCEpAsAgCcMLxdj6dl8Jilv8sM+RwYPL/joge4mzloa+RvKkuJ+qzH/+M4m7jPiCxNfV9sduwoOZZ8276ywJ10Z+fUQs3bXzY6q3dAVvZxylU/iu8tQZbX2Jntg/MAB70b1mOBwsojIkuPteza0s+IfAEJWAQDAE5IuAACekHQBAPCEOd1iZB3AUqCKpPqaPftuJO4crojIxy+PiupxZy/sbeKUc3c6dflRPQNKamCD4Ly6ithu3sdtnHJj+SNBParYUjq3d8r/ucnu8NSj2s7w5kZwp6ngsiCRxM7jqq4dnXLz9J8jtBRZmJtj4lqLE7ekjDtdAAA8IekCAOAJw8uoUBbsauD+oNZSEz734nAT/2dtT6fZxN9bm/iTw4aLq5qJtoR2m7jbh39zWrW71S5fCe3YEW2X4UGzd93hZIb7Y3PsS+7wbHFDykFT3z3YxI02lP4A+mjNG1DdKR+WoSO0FJmww+5YV+29KQnrE3e6AAB4QtIFAMAThpfDpFS1Zyoe0yjyJvWj1h0fKG1PYI9QEnOu7+D+4J0fTXhgqh0mHtbwO6dZSkM75BUKDCeHO+GJwSbOfsgdJuMcZT+CuyC1TQ9eg6pOu5X5gaHPPAaUY7X+2iNNPKDOo2G19iCY1fm7nJpbfre7sjX931oTJ/pKpLVoZuJJpzweVhv5vf3txtaB0vr4diqAO10AADwh6QIA4AlJFwAAT5jTDZNSu5aJn2j4ccR2k761B5i3kmJOrEHC5ZzWzcTLL3J3kkkpZpeioFQV+Pyp3dnZHrPPMXHDh/wtd0CB1Ab7O+Wul8w0cc2UquHNje7jbjNxmwW8R2O1zU6RSmZKRsR2j6w7wX3cscF50cTNkYabd709qD74PY5wmwLL/0RE1gxrZeIazOkCAFD+kXQBAPCE4eUwec0b7LuRiDT9JDfBPUFQSqd2TvmAkfZQ+NFNnjVx8ND6gnLR7lzTzSn/b8qhJn6611inbkzbl03c9wI7ZJn5JkOWXtSv4xRHN/mkyGZbw4YLs5ZwT+HTJ58f6pRbyGR/L67sNJJOje4ht6041SnXePvHCC3ji99KAAA8IekCAOAJSRcAAE+Y0w2z/u7dRf6899wznHKVib+aOPK5FSiN9f3t9nMT7nnEqavlLBWJvCzo1tVHmPjjL+2cU/bj7haf2avtqSKPnHCpUxc8xP6ie+0ysg/edOcakRj5NapE1W5mrnuizAFDWd7l04HfJW+rzS2XHm7iuRc8GdVjvv/O3TLW19JP7nQBAPCEpAsAgCcML4d5+qBXAiX73fNVW2s67RrmrfDUo8pj20VHOOXgkHKtsJ2H5uTaJVuPr+ll4nlDOzrtar37i4lb7rZLGNx9q1ypk351yu3evN7Ev54/1MTjTrrBaZf+6U/FPCtilfXo6qjaDZjuTgs0ltmJ6A4iaHbXXKe8dnx8nz+tcSMTL7i+qVP342XB048i75r12ja7JDT7+U1Ona/Bce50AQDwhKQLAIAnlX54Oa25O0yRpew3HlNVuu/uVGrrO7nfQg4OKY/bUdepe/6C00wc+uU3E2eFfQMxloPlU6q5Q9kd/7LUxBmB34lQWnSHKaDk0po0NnF25rKI7S5d2tPEza5e5dRxbL1fx9Re6JTfbWOni/IXLI7qOVLbtzHxgivqO3VDz3vexCdV2xH2yMhDykFjrz/TxGmzp0X1mHjjThcAAE9IugAAeELSBQDAk0o/p7t7tFvOTrfzefmBw8wz33SXDCHxggfQ3/HVBU5d9i9T4/paqfXrmbj6OHeu9o2WHwVKzOP6sKZ3ExO/v//7Tl2qsvcKm3bbXahS9rhLQFS63clK5+6JdxcrjTaj7ZKtIb27OHX37meX5F1Vc7lTl/q+/fs5c2djiUaXGpNMfGlWdEvFwr2/w+4Ud9vnFzl17X6wy8hi+b5HPHCnCwCAJyRdAAA8qZTDy6nZrUx8a/P3I7a7eInd6ajm634OOK7M6s9wj47YFNpl4qm9hzp13Z4dZOL2//e7ifPXrov4/GmNGpp4R+dGTt2gYa+Z+LTqW5y64DDUk5vt7061b+ZGbIfECU77fNQu8P6d77Zr8/ZAG9/sZzP7iihv8VITTxh+jFM3aIj9dw3fNa5vzZW2EIzjYKd2pwue3GiHvb/+azcTZ/80xWlXFt6j3OkCAOAJSRcAAE9IugAAeFIp53T3NKpl4h7VciK2m/9GWxM30ByInWhZr7vzbse1HmziXwc84dTN7/OMiWefZM8MGrTgwojP/0p7e4JU+PxTcHlS+LzPravtdnZzb7QHX6ttvwoSo+pGexUW5e1y6lqlVSvyMbvC5vmqr+aeIt7qPjfZKf/fgB4mvm6/iU5d+/T4bqMb/D7FS8NOderqjwz2a1ZcXzfe+K0EAMATki4AAJ5UyuHl4ly34lgTN3xtnok5scQQIOiAAAAgAElEQVS/unPtv/ozm1s6dR2qrjBx96p2aPizju8U84xVI9Y8s6WZiR//sI9T1+ae6SZWuxlS9iHzLbtE74IDBjt1v/z9KRP/e307E78z8kSnXaMRTAkl2qJuu018Z+uL3borDzDxyaf8ZOJHD3SnkTq+eIOJVTF/aFu9usHE9X+bHLlhGcedLgAAnpB0AQDwRGmt990qTnqlnO/vxeD4LPRW3HfqT+b1TGve1MQL/lM7YrsH//Kuib/f1trE4ycc7rRrcVf5Gq5KxPUU4T2aTBXtPVrZRbqe3OkCAOAJSRcAAE9IugAAeMKSIZRLeUuXmbjFRcsithspwaVGdpejFlK+5nABVAzc6QIA4AlJFwAAT0i6AAB4QtIFAMATki4AAJ6QdAEA8ISkCwCAJyRdAAA8IekCAOCJ11OGAACozLjTBQDAE5IuAACekHQBAPCEpBuglNJKqR1KqfujbN9PKbW98HGtE90/lEwM17Nn4fUMKaV6Jrp/KJkYrueQwvZaKcWJamVQZfybS9L9s85a67v3FpRSpyulZhVe6O+VUh321mmtx2itM5PTTUQp/HqeqJT6WSm1VSm1WCnVf2+d1vrzwusZ+axAJFv49eyilJqmlNpZ+L9d9tZpre8VkY5J6SVKwlxTpVR9pdR3SqkNSqnNSqnJSqmj9zasCH9zSbrFUEq1EZFXROQ6EaktIuNF5H0+NZdPSql0ERknIs+KSC0RuVBEHlNKdU5qxxATpVQVEXlPRF4WkToiMlZE3iv8Ocqn7SLyVxHZTwqu6X9FZHxF+ptL0i3eySLyjdb6W611nhT8AjQSkeOT2y3EqK6I1BSRl3SBqSIyR0Q6FP8wlFHdRSRNRIZqrXO01sNFRInIiUntFWKmtd6ttZ6ntQ5JwbXMl4LkWze5PYsfkm7xVOF/4eWDktMdlIbWeq2IvCYiVymlUpVSR4pIMxH5Nrk9Q4w6isgM7W42MEMYUi73lFIzRGS3iLwvIqO11uuS3KW4IekW7zMROV4p1b1wyOouEakiItWT2y2Uwmsi8n8ikiMi34jI3Vrr5cntEmKUKSJbwn62RUSyktAXxJHWupMUjEpdIhXsQzFJtxha67kicoWIjBCR1SJSX0R+E5EVyewXYqOUaicib4hIXyn48NRRRG5XSp2W1I4hVtul4A9zUE0R2ZaEviDOCoeaXxOROyvS9y5IuvugtX5ba32Q1rqeiNwrBcORU5PcLcTmIBGZp7WeoLUOaa3niciHInJqkvuF2MwWkU5KqeAUUKfCn6PiSBeRlsnuRLyQdPdBKXVI4fzfflLwrdfxhXfAKH+mi0ibwmVDSinVSkT6iMivSe4XYjNRCr5oc5NSKkMpdUPhz79MXpdQGkqpI5RSxyilqiilqiml7hCRBiLyY7L7Fi8k3X0bJiKbRWRe4f9ek9zuIFZa60VSsBxhuIhsFZFJIvKOiIxJZr8QG631HhE5SwqmCzZLwbU9q/DnKJ8yRORJEdkgIitFpLeInKa1XpXUXsURpwwFKKV2S8EXbIZrre+Jov1VIvK4iFQVkQ5a68UJ7iJKIIbr2UMKknCGiPTWWn+V4C6iBGK4nveKyC1ScD1raK3zE9xFlFBl/JtL0gUAwBOGlwEA8ISkCwCAJyRdAAA88bqJdK+U85lATpLPQm+pfbcqGa5n8iTieopwTZOJ92jFEul6cqcLAIAnJF0AADwh6QIA4AlJFwAAT0i6AAB4QtIFAMATki4AAJ6QdAEA8ISkCwCAJyRdAAA8IekCAOAJSRcAAE+8HngA+JbWrImJNx/eyMSr++xx2g34yyQTD6oz36k76NurTBxaWsPErYf86rQL7dwZuR8HHmDivNVr9tVtoELJ63GIiTd0zHDqdu1vz2TQrXeY+I7Onzrt+tWy75tPdrrPMXhkPxM3fOj70nU2wbjTBQDAE5IuAACeMLyMCmXV4KOc8t1Xv2biszPXRXxcSuDzZ0hCTt2MY8bYwjE27Lz7Zqdds3sjD2tlvJFv4rzjIjbDXsoeRbpuwJFO1YAb3zVx/1qrYnr6kVsamvjdM44wcWjpCqedznWnIRC9LZfZf9cv/zPcxBnKTTshKfrI3xRxj6PN1bZdj2ruVM63Nz1q4qNSbzVx4wfL3lAzd7oAAHhC0gUAwBOGl8OkdG5v4nm3VDPx5V1+dNrdWHeKiXs8OtipO2Bo2RvSqMhSO2SbODicLBJ5SPmP/Byn/HtedRPnS7pTd2gVO8SYGhj2/PXqYU67blvtcPOBj7q/A8fUXWTiCVKzyD5VeimpJlx+9+EmnnndiIgPydF22H5VnntNqwZGJ/dPre7U9atph5H7TXzbxMM2tXbafdHnIBPnLV0WsR/4s61nbTdxurLXNnw4eVneLhPfveKMiM/349yW9vlquMP+3x79tImPOsuuKlj+mPstZ53j/o4kA3e6AAB4QtIFAMATki4AAJ5UyjldlWHH+df0P8Sp+/FOO0+3LWTnDY54/Tan3ddd7NzP8ZdNdermDY1LNxGluXdmmjh8Djd4DU/46RoTNxhW1WmXOvHniM+//lq7ZKXPwK9NfFf9X5x2+e70kePbja0CpT8iN6zEVg6Odh43z8SdX7Xz6C1vn+y0S23fxsRz/57l1M068RkTB5ew3FxnoftiH9jw8+4tnKr89Rsi9hEiza9ZaeKBn9h1crM2HuC0qxNYeZc/f5FEki0bI9Yd/szfTDz/dDu/2+XWG512jR9I/vdtuNMFAMATki4AAJ5UmuHllKp2OHHu0E4mXni6O4z1xGY7JPXWkFNM3OrNsKGrbDtcOKNVF6dOn27XKqTttEsa0r6YVtJuIwr/O/bpQMn9HDnwd7sEoeHZv8X0/PWftdf+y3V2S6q7RvxSVPMizfvE/l41ZnhZRERUmvvnp8rR0Q3XHvQ/O2TYJmxIOSh/zgLbrq9bd2x/O6b50B0jTdy9aq7TLjjc/EXWwe6TMLxcrPxNm0w8fZSdoqm9yF22kz8/8tROtFJ3FH3/2LH3PKe85YFSv1SpcacLAIAnJF0AADwh6QIA4EmFndNNqe5u+7by1WYmXtjNLhd4bFMbp92EG483ceZXP0R8/uBX26tv2urUDZo80cSj19ivym/5Yh+dRkwOrmK3bQzfYm7qfLvMI1tKPweXNcvOx3672112VG92XnhzQ6uIVZVWatPGTnnqIa8V2e6JzS2dcrtn7FxhfnjjKNUfaeeCx11zqIm7N4w8R4zY1RudnH/XPvV/dcqvSOMILf3hThcAAE9IugAAeFKhhpeDQ8pzHz3IqQsOKT+ysa2Jvz6jg9MudUnJv76+/Ep3iLpHtQkm3riffb4Xa3dy2uVv3lLi18KfnTDrXBN/dtCbTt3Y7qNNfL+4S7uildfD7lq23312WqFlmnv96t+6xMQ73nOfQxV9TneltvTChhHrtmu7rOT1B05x6mr9FnnaJxaLr2xu4u/Gu6eJHZ0RMvGC/m5/W95jd1zSeZGnFhB/Oad2c8pX9ppYZLt313UN+0nyl+txpwsAgCckXQAAPKlQw8t/XNrZxAvPeNKp+3Cn3RT/6zM7mjhvydJSv+6eWpHHDufstkNSDCcnRuYg+2v89NvuUH//WvNNPP+pw0zc4b+rnXZrT7Lfajz9hklOXd/a9hCMhmnBUw3cEw5ebDnexH16uxut51VjfFlEJLVeXRPfccWbEdu9vc1+67zWK/EdTg6XP9vuWnTFhP5O3cIz7LTUnL7u35TT3glsc/XTrMR0rhJLrVnTKa+92P7dvnaQO3/Tr+YKEy/N22XiDQ+7h1RUZXgZAIDKg6QLAIAnJF0AADwp13O6aY3cr/DfPvhVE6/M3+nUPXjvQBPXXFz6OaK0ls1N3OfUHyM3RMIFT5N5adipTt2Ae23d3DMDc3Jnus+REvj8GZKQWylFn05/x5ojnfL4r+3ORu1mrnDqrn3InnA04R53rqoyUYHTvi7NWpfEnhSt5tywP4lnFN1ORGTedfb/S/bVCepQBZTSxV2muap7bRNvbWuXXl1ztPvdisH1virmWe2Wbz0/usXE2eOnxNjLxOFOFwAAT0i6AAB4Uq6Hl0P13GG6c2vYjdD/tf5wp67mqyUfUg4esr1y0GFO3Z3XvGHiizKT/zX0ymzXmfbaHHvt1Lg/f7/fe5n4j1uamjhlxkKnXeud9neM/YlK56tN7QKlzUnrB6KXduABTvmKSfaQg5OrrzFxurhDvukqtdSvfcxtdvow+434/w2IJ+50AQDwhKQLAIAn5Xp4uThn1JzulD/of7OJ03dG3h1o42l2N5MPjnrKxK3S3CGRd3fYb9y1fv86py64i83Ujc0CNauK7zSitvEq+83hC2791MSD6swPaxnd58rgEFeHJ93dpJrc/32gZIc6w7/jXJwUVZLWFdfiq5tH1W7W6/Ybrg3k+2JaoqzQddzpvrNrbAyUqiT0tZ0DRUKxnrLsB3e6AAB4QtIFAMATki4AAJ6U6znd0Mx5Tjn7Tfu18fkXPOXUTbnXPSEkGp/sqmfis0b/1alr+tA0E7dru9V9YGAXmwVT7ZxuS+Z0Y5bWrIlTvueusSY+tfo2E4fvJrUx3x6GfsYMew1fPOgFp13rdLvrVNruUnW1SCHN51sRkd3N9iS7C0iU1e7SycOnXWLirvuvNPE3Xx7stKu2VklRdjVwv3vzr3NfN/G5meudut53TTTxR9LdxFmvJ/aEqljwlwAAAE9IugAAeFKuh5dFu8MPrf9mhxIOm3u9UxfqvUmKsnldllNu/o6Nq3xidzZpErZsIfjKesZcp+7f6w8y8WUn2027v789sV+br2hS27Y28YMTXnbq2qbbJT7L8uwQcu+XBzvtWj/1u4nrrrTLifq85P5+zD1xtG13ctg0wOOBHXNiXI4w5tVTTNyYJTCogPI3uX9j9zvDloPHf7SQyRKLl56wuww+8Xx1p+7Lg+0OgZOuaWMr3gzb7aoMLCfiThcAAE9IugAAeELSBQDAk/I9p1uM+s+GzRs8W3S7/ePwWqn16jrlrtXt3PK0nS3i8AqV04J7M00cnMMVEfl8l52L/+f9N5m4+fPudY902k/ry91tQs+ddJqJJ3R8y6k7YqDdQnT/EbHNxzZ+gHncfVmdv9PENZeV/XOaaizkOxo+5a22JxVlnuLW3Tr1GBN/1O5dEx9xzQ1Ouz/lhSTgThcAAE9IugAAeFJhh5d90o3cQerTqm838c3f2NNwsuUnb32qCF444rmIdQ/ffLmJ635Y+iGjRZ+0tAV3REquHjjexO+PqCdIjKwUO4WQU9PG1RL8uqnt7RKTy66ZEPXjmo1dbOKyPxgeH6l16jhlvcfuMBbascN3d4xPvu5q4scvslM5Z1//ldPum2ereutTJNzpAgDgCUkXAABPGF6Og5W96kasS1uf7rEnFUtqYN+vlLDPhxkbcsKbl0rzF+xQ4ct93cMVjq620MQf1s82cf76DXHtQ2WQNTvwjd+T3bpMZQ+dOPJmuxvcnBcT26dGL9gdyG6psyBiu/Zj3V3MWv4xNULLiiWtSWMTd3hvpVP3wXt2+qzpkMR+Q19l2N+PZYMPcepu7/1uePOCPlVZH/aTxkW284k7XQAAPCHpAgDgCUkXAABPmNONg5w6et+NUGIvbzjKxF0bfuvULf2bjVs+2MHEoV9+i+m1dJ49fWRLvnuCSfsq9rPpurPtnG69UdEvVdp20REmLosHa/vS5PWltnBL5HYHV7fn0syRA+Lej8X/sXORbzZ6LFCT4bQbtcXO77d+fKFTl59XORYKbTmskYn/0+B9p+6uq78z8SH1/+bUtR29tcSvtfj82ibOrRNy6u7r+baJL8h0549TRJk4+Kin7jvPaVdLkv/e404XAABPSLoAAHjC8DLKrE8//4st9HWHl2ccM8bEq96zy4ceXdfDaffxN10lGuPOGWri8MMVpufYz6b7vfKrid3Br+Kd949PTTzh9ZoleGTFogO7Fg3b1Nqpu7mOHb69OGuZie9/sbfTru0j9mCE0Iy5Ub3u9vMPd8rTL3vcxNUCS5WCw8kiIu+fa6c48v+IvJyoIquxcpeJ/73+IKfuH/VnmXjeOU85dSnnBId8g8v/lNMuWOc8Psp2IiLrAodlHP3erSbOfts92KQsTARypwsAgCckXQAAPCHpAgDgCXO6CZCq7GeZOrOT2JFyrvXQRSb+8UJ3O83DM3JN3DjNnkPzaNjSokcvdMuRpIh9/lDYbO3H2zrZup07JRaj5hxt4qYyM6bnqAjyN28x8Rd93PlB+cCGwfndBT1GO81eOswuIfrv6+6SkKBLz/nSxrUedeqqqerhzUVE5ImXz3TKjeckdmvDcuGHGSb8+pYjnaqT/m7n5f/X7g2nLritZ/j8bJC73MfOur6yzT297bxMu11nx08GOnXNxtnnaPPhjyYuC3O44bjTBQDAE5IuAACeMLycAPnaDk/WmbO9mJYoTv7adSb+zynnOnXzBu5n4v49vjDxoLqx7UjVb9kJJp46wR32bDlmWaC0QmLR9PzKO6QcSd7SZU751WGBY4duDoR13J2gLs9aY+NrRkT5au5w8gtbG5r4nfOON3HjOT8KIkv7Ypr7A/vWkzNOv9mpWnWxPeB+yrF2OdF58y5y2q3/wJ78owIzOw1fcZeDje1sh/6zv/wp6j6XNdzpAgDgCUkXAABPGF5OgOC3lxEf+fMXOeXWg2z5S6kRiLvF+Ap2c/am4n5jtXJsa598wQMkPn2hvok/b97FaTf3Bvut1mMOs9MJ307pIJG0G7nJKYfmLzGxzp1X8s7iT6qOn+KUW4638UVid/ZKE3da4YCw8l75YeW0LzeWqn9lBdkBAABPSLoAAHhC0gUAwBPmdBNgUa5dJpS62e5gFD5HAaBoOtcuN8lfsNipa3OzLa8N/ryYA8p576Gs4E4XAABPSLoAAHjC8HIcNP/HZKc88B/HBEruUhcAQOXFnS4AAJ6QdAEA8ISkCwCAJyRdAAA8IekCAOAJSRcAAE+U1jrZfQAAoFLgThcAAE9IugAAeELSBQDAE5IuAACekHQDlFJaKbVDKXV/lO37KaW2Fz6udaL7h5LhelYsXM+KJ4ZrOqSwvVZKlcuzA/j2coBSSotIG631wsDPRorI8SLSRkT+qrV+IZrHIfnCr4tSKltEHhaRo0QkVUSmishNWut5xT0OZUMR1/NYEfk4rFkNETlPa/1OpMeh7IjwN7eLiIwRkfYiMkdE+mmtfwnUNxeRJSKSrrXO89rhOOBOd99+FZGBIvJzsjuCUqstIu+LSFsRaSAiU0TkvaT2CDHTWn+jtc7c+5+I9BGR7SLySZK7hhgppapIwXvyZRGpIyJjReS9wp9XCCTdfdBaP6m1/kJEdie7LygdrfUUrfUYrfVGrXWuiDwuIm2VUvWS3TfExRUi8rbWekeyO4KYdZeCI2eHaq1ztNbDRUSJyIlJ7VUckXRRmR0nImu01huS3RGUjlKquoicJwV3Rii/OorIDO3Oe84o/HmFQNJFpaSUaiwiT4rILcnuC+LiXBFZLyKTkt0RlEqmiGwJ+9kWEclKQl8SgqSLSkcptZ+IfCoiT2mtX0t2fxAXV4jIi5pvhpZ320WkZtjPaorItiT0JSFIuqhUlFJ1pCDhvq+1jmqZAso2pVQTKZgLfDHJXUHpzRaRTkopFfhZp8KfVwgk3X1QSlVRSlWVgsn8dKVUVaUU/27lkFKqpohMEJHvtNZ3Jrs/iJvLReR7rfWiZHcEpTZRRPJF5CalVIZS6obCn3+ZvC7FF8lj3z4VkV1SsLZzZGF8XFJ7hFidLSLdROSqwk0T9v7XNNkdQ6n0Fb5AVSForfeIyFlScE03i8hfReSswp9XCCRdV46ITFNK3bf3B1rr7lprFfbfRBERpdRVSqnNhY8LJafLKIZzPbXWYwuvX43g+k6t9TIRrmc58Kf3p4iI1rqd1npMeGOuZ7lQ1N/c6VrrQ7TW1bTWf9FaT99bp5S6Vwr2TsgRkXI5f8+OVAAAeMKdLgAAnpB0AQDwxOspDb1SzmcsO0k+C72l9t2qZLieyZOI6ynCNU0m3qMVS6TryZ0uAACekHQBAPCEpAsAgCckXQAAPCHpAgDgCUkXAABPSLoAAHhC0gUAwBOSLgAAnpB0AQDwhKQLAIAnJF0AADwh6QIA4InXU4bKmwVj/2LieT1HOXUn3jDQxNXH/eitTwBQGaR2bOuUl55Tz8SH9p7l1L3Y7GsT5+r8qJ6/x/UDnHK1d6eUtIsx4U4XAABPSLoAAHjC8HJxtD2DOCQhp2plDxu3GeerQ9grrUUzEy8/u5GJt2XnOe3aZq808fi275s4+4PrnHaNJ9jPnzWnr3Hq9PadJs7/4w8TqzT37bPqpsNMnFfN7W/TR6bZ58vJEQB/tvWSI0x82p0Tnbpx9WZGfFyutu/f8L/VkTw9dJhTHjyvr4nz5yyI6jliwZ0uAACekHQBAPCE4eUYtWq/ysQqI8OpY/gw/tYMOsop/zT4CRNHO5wUbDW/zzNuXZ/Iz/HGtgNN/NzfzjbxqmPdt8/MK9zhqqDTJ15jYvXdL/vqKlBhpVSt6pQX/bOriWdfPsLE0b6vY5WdXsUpz7m5jq27Lrx1/HCnCwCAJyRdAAA8IekCAOAJc7ox+qjduyY+M7OXU5fPnG5cpLZuYeKxNz8eVlvyX91x2/c38bmZ66N+3IVZq208+ikTp4R9Zg3OQE3PcetSt+wusl1ls/YmOze/9dDdxbRMrPQMu7Rs1jHPR2zXp9EhPrpT8Sm7/DI4hysiMvPy4YFS6e8DO7x5Y8S63y54ImLdgye8ZeLnD+tjK6ZEXqoUC+50AQDwhKQLAIAnDC+jzFrV2y7VaV8l8ufDE2deaOIa99WM2C599WYTj2lY26nLqWeXDwx86C2n7uzMdfvurIjM2qNNPPjWgU5d9VkciiEisuMIu7vXnONHRWwXHLqPdelItM8RrHl5a5OYXgt/FjrWDiMv7m9//tuJw4to/Wdvbz/AKf/jW7tcr8n77t+Dau/Zwwpayw8mVl07uk96QeTXC77Ph7esYeKsOJ+DwJ0uAACekHQBAPCEpAsAgCfM6aLMOubyaRHrVufvMvHamQ1MnHpq5Odr8JOdt117aKr7Wj3tsoBo53DDfbC1i4mrj2MOtyhtBi4x8TlZZzt1S65sauKcOnamVWmJSaj+HhPP6flsxHbtPrLz7+1vXxhWuym2F6+MAsuCRMLncUdG9RSnzzvDxKF79nPqsr/7Kfa+lSHc6QIA4AlJFwAATxheRpn14U+dTfzQ6d84dU3TMk0855IREpWrbJiu3OHlXJ0fKLmfRdcHhrKPfes2E088/xGn3V317RB19wuud+oy3/xBIJK/eYstBGMRaXLfiri+1vYL7IHo0tOtW5hrd6Rq//BG279NDCeXRPDEoPCdpqJdGvRjTrqJ9YkrTaxkZVHNyz3udAEA8ISkCwCAJwwvo8zKHmC3gvlLvX5O3cyjXzBxLDsW5YZ9I/b9HfYA62FLejh1KcPqm7jVR3aY+Ngatzjt5p7+pIlX9cp36rLfLHEXUUqr++yJWDdkhd3QPn/+Ih/dqZB0+1Ymdg8uiKz9F9c65VYj7fs3RX6JT8fKMO50AQDwhKQLAIAnJF0AADxhThflQssh7vxc947XR2gZm9o/rTFxtcVLwmrDy/t2cPZyp5wTS6dQKgt6jDZxKOz+YtqUNiZuLRu89amiWdmjlolTirmHG7ejronbjMh1K+N8SHxxgn3887JBG2t3c6049wEAAHhB0gUAwBOGl1Eu5M+e55QzZ8f3+fP23eRP2mZH3jFn5nz3MPRsWROhJRIlJDoQu8vKYj1EobJLa9LYKZ9yyWQTF7d0744vLzRx9pQ4nwpfjBX3uOVgH8OXDV6x1G5bVufD30zsLv4rPe50AQDwhKQLAIAnDC8XJzAGFf7NvPBvvqFyyO15iIkntHXPCJ0c2Li97VM7nTpGMxNv15mHhf0k8nnM+XXtN2gXv2rPQT6k2TKn3aADP7OPEfcrrdc8d4OJm/z7+5J0tdzaeKw7vPzvBuMitu016wITt799ronjPVwbbukbnUz8XJcXon7comfambj21snFtCwd7nQBAPCEpAsAgCckXQAAPGFOtziBbUnCvw4f/Lr5nAdaOXXZ124UVBwpWVkmfmCknccNn9f/erudE9LT47ymqQJKbbC/U952VAsT76pr7wdSzlkf1fON7Tg07CcZEdvOPemZqJ6z3++9TDztkw5OXfPH7Ik4JT/nqnzacMbOfTcqtHxFPRNnby35rm6xur3TpyY+NCPyDHK/ZSc45XqfLDRxIuedudMFAMATki4AAJ4wvBwPVSrL4FLlkFqvrlPe/qrd1L1rRuQdbZ6bdLyJ28iPielcOZd70qEmzrpnqVM3ruUIEweX6BW305Erfd9NCgWHjf+4pWnkhj/MMGFTcZcFVcZ3/V1dPnHKxR1ykN3vp0R3x9j6sZ3i61szuFQscv9+e66jU673R+KWCQVxpwsAgCckXQAAPCHpAgDgCXO6QJjl/do55Z8OGlZku3+v7+SU2z++1sSxnFpUGfx+qv2TM6HlBKfulW2NTLw5v7qJ31vV2Wm37qtGUpTh/Z51yj2q2YUf3X6+2Kmr22d+oLS5+E7DyNfufVr08+2ll1rbfrdi4TPNnLrZnZ6Pqk8d3rzRxK1H+ZnDDcedLgAAnpB0AQDwhOFlVErBXaZERNa+0tDE73R+OKx1FRMN32SHnic8dKzTqtbiH+LXwQqq9hy7y1v2R9c5de0H2yHf/M1bTFxFfnfaNQ4r7/XrJe6Q43FVF8TcTyRf8EQvEZEG99nrOa7pmLDWRd8/fr7LfZ+3HWV3C0z0aUeRcKcLAIAnJF0AADxheBll1ppBR5m4Sk930/tHO7xp4pCO7rPj/UtPM/GQFu86dcGdpoLDyeG+uryOiFwAAAQBSURBVNDuqFRrNsPJJVV/5ORA7NYlcrgv/eW6+26EuNpw9ZEmrjc6um8Kz3/eDik3a7TBqRvV9IsS9+HGj69wym1+S/5OcdzpAgDgCUkXAABPSLoAAHjCnC7KjG0XHuGUfxr8RMS2wQPkc3VuVM//UTs7jxt+AH3wxKAtod1OXY9HBpv4gNnuSTNIrtQG+5u4YXrRS4lERNJ2V8YzgeLvoRknOeW+xzwfoaVIh36zTfzTgfb7Gf0v+shpd33tRSZOV7+YOFeHz/JHvkcMvp+zx95g4jZ/T86uU8XhThcAAE9IugAAeMLwchiVZv9JMmrsSWJPKp/VvdxjAorbuDw4HBzLpuvhB9AHn+P/1vRw6hp9+oeJk7WLDYq27agWJj4788OwWu4p4q3xyHSnPLmbHdY9PMOd5nGW+FwXeblP8N0b7fs6uDOciMio8XbYu+U/fzZx2Nu8TOC3EgAAT0i6AAB4QtIFAMAT5nTDpLRoauJfjnouYrvgspKGH/HPGKvUenZ7vosPmZLEnliPN/zGKX81PtPETxzT3cR5a9YKyo6UsHuI4Hs0bTuz8fGQ9sU0p3zbkAEm/uaB4XF9rRV5OU75obW9TLz8yiZOXYvf7NKgsjiPG8SdLgAAnpB0AQDwhHHRcBs3m/DgF28y8aHHzXWarXi4jYkz303+yRXlVW4He/D4vftPiPvzn/LbeSZeO6mRrVBuuzsvtacWXZi12qk7odp2Ez+REfkEIiRX+BKTF7ccbOL0z6eFN0cc1P/E7ibVtcnNTt30AcNK9dxnD7vdKR/4WHA3uPmleu5k4k4XAABPSLoAAHjC8HKY/A0bTdwisFn2hrB21aRsfNO2vEtfbYfzj5l+qVP3bddXIj5udf4uE/d6yR5I0HrkCqddxio7VNwkN/KG+K8/09XEb1Q/0qnbekhDE2dtLb/DWpXNqDlHm7ipzExiTyqu/LXrTNzk3+ucujP+3a1Uz32gVMzDRbjTBQDAE5IuAACekHQBAPCEOV0kVf7CJSau28etO0OimxNqLnbuPa+YdsX2448/ItZV/325bRfj8yMxVvaMXJf5UWbkSiBJuNMFAMATki4AAJ4wvAyg3ErZbbcWe3TDQU5d3ecnhzcHko47XQAAPCHpAgDgCUkXAABPmNMFUG61uvUHE0+SaknsCRAd7nQBAPCEpAsAgCdKa53sPgAAUClwpwsAgCckXQAAPCHpAgDgCUkXAABPSLoAAHhC0gUAwBOSLgAAnpB0AQDwhKQLAIAnJF0AADwh6QIA4AlJFwAAT0i6AAB4QtIFAMATki4AAJ6QdAEA8ISkCwCAJyRdAAA8IekCAOAJSRcAAE9IugAAeELSBQDAE5IuAACe/D8gDsctzBrBmwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,8))\n",
    "\n",
    "for idx in range(16):\n",
    "    plt.subplot(4,4, idx+1)\n",
    "    plt.axis('off')\n",
    "    plt.title('[{}]'.format(mnist.train.labels[idx]))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28,28)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "接下来，定义用于训练的网络，首先定义网络的输入。\n",
    "\n",
    "这里我们直接使用上面的数据作为输入，所以定义两个placeholder分别用于图像和lable数据，另外，定义一个float类型的变量用于设置学习率。\n",
    "\n",
    "为了让网络更高效的运行，多个数据会被组织成一个batch送入网络，两个placeholder的第一个维度就是batchsize，因为我们这里还没有确定batchsize，所以第一个维度留空。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = tf.placeholder(\"float\", [None, 784])\n",
    "y = tf.placeholder(\"int64\", [None])\n",
    "learning_rate = tf.placeholder(\"float\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From H:\\anaconda\\lib\\site-packages\\tensorflow\\python\\framework\\op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Colocations handled automatically by placer.\n"
     ]
    }
   ],
   "source": [
    "def initialize(shape, stddev=0.1):\n",
    "  return tf.truncated_normal(shape, stddev=0.1)\n",
    "\n",
    "L1_units_count = 100\n",
    "\n",
    "W_1 = tf.Variable(initialize([784, L1_units_count]))\n",
    "b_1 = tf.Variable(initialize([L1_units_count]))\n",
    "logits_1 = tf.matmul(x, W_1) + b_1\n",
    "output_1 = tf.nn.relu(logits_1)\n",
    "\n",
    "L2_units_count = 10 \n",
    "W_2 = tf.Variable(initialize([L1_units_count, L2_units_count]))\n",
    "b_2 = tf.Variable(initialize([L2_units_count]))\n",
    "logits_2 = tf.matmul(output_1, W_2) + b_2  \n",
    "\n",
    "logits = logits_2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "接下来定义loss和用于优化网络的优化器。loss计算使用了sparse_softmax_cross_entropy_with_logits, 这样做的好处是labels可以不用手动做one_hot省了一些麻烦。这里使用了sgd优化器，学习率为可以根据需要设定。\n",
    "\n",
    "试试看，增大减小学习率，换个优化器再进行训练会发生什么。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "cross_entropy_loss = tf.reduce_mean(\n",
    "    tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y))\n",
    "\n",
    "optimizer = tf.train.GradientDescentOptimizer(\n",
    "    learning_rate=learning_rate).minimize(cross_entropy_loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "需要注意的是，上面的网络，最后输出的是未经softmax的原始logits，而不是概率分布， 要想看到概率分布，还需要做一下softmax。\n",
    "\n",
    "将输出的结果与正确结果进行对比，即可得到我们的网络输出结果的准确率。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "pred = tf.nn.softmax(logits)\n",
    "correct_pred = tf.equal(tf.argmax(pred, 1), y)\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "saver用于保存或恢复训练的模型。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size = 32\n",
    "trainig_step = 1000\n",
    "\n",
    "saver = tf.train.Saver()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "以上定义的所有操作，均为计算图，也就是仅仅是定义了网络的结构，实际需要运行的话，还需要创建一个session，并将数据填入网络中。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 100 training steps, the loss is 0.581002, the validation accuracy is 0.8878\n",
      "after 200 training steps, the loss is 0.2259, the validation accuracy is 0.9136\n",
      "after 300 training steps, the loss is 0.261391, the validation accuracy is 0.9198\n",
      "after 400 training steps, the loss is 0.223897, the validation accuracy is 0.9378\n",
      "after 500 training steps, the loss is 0.14123, the validation accuracy is 0.9376\n",
      "after 600 training steps, the loss is 0.204344, the validation accuracy is 0.9332\n",
      "WARNING:tensorflow:From H:\\anaconda\\lib\\site-packages\\tensorflow\\python\\training\\saver.py:966: remove_checkpoint (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use standard file APIs to delete files with this prefix.\n",
      "after 700 training steps, the loss is 0.147791, the validation accuracy is 0.9422\n",
      "after 800 training steps, the loss is 0.323522, the validation accuracy is 0.9374\n",
      "after 900 training steps, the loss is 0.171573, the validation accuracy is 0.9538\n",
      "the training is finish!\n",
      "the test accuarcy is: 0.9338\n"
     ]
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "\n",
    "    #定义验证集与测试集\n",
    "    validate_data = {\n",
    "        x: mnist.validation.images,\n",
    "        y: mnist.validation.labels,\n",
    "    }\n",
    "    test_data = {x: mnist.test.images, y: mnist.test.labels}\n",
    "\n",
    "    for i in range(trainig_step):\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "        _, loss = sess.run(\n",
    "            [optimizer, cross_entropy_loss],\n",
    "            feed_dict={\n",
    "                x: xs,\n",
    "                y: ys,\n",
    "                learning_rate: 0.3\n",
    "            })\n",
    "\n",
    "        #每100次训练打印一次损失值与验证准确率\n",
    "        if i > 0 and i % 100 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict=validate_data)\n",
    "            print(\n",
    "                \"after %d training steps, the loss is %g, the validation accuracy is %g\"\n",
    "                % (i, loss, validate_accuracy))\n",
    "            saver.save(sess, './model.ckpt', global_step=i)\n",
    "\n",
    "    print(\"the training is finish!\")\n",
    "    #最终的测试准确率\n",
    "    acc = sess.run(accuracy, feed_dict=test_data)\n",
    "    print(\"the test accuarcy is:\", acc)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面，用我们训练的模型做一个测试。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From H:\\anaconda\\lib\\site-packages\\tensorflow\\python\\training\\saver.py:1266: checkpoint_exists (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use standard file APIs to check for files with this prefix.\n",
      "INFO:tensorflow:Restoring parameters from ./model.ckpt-900\n",
      "0.9375\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "            [pred, accuracy],\n",
    "            feed_dict={\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16]\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8, 8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx + 1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}]-[{:.1f}%]'.format(mnist.test.labels[idx],\n",
    "                                                  order, prob * 100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "\n",
    "    else:\n",
    "        pass"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对模型结构的理解。 \n",
    "两层结构，L1层100个神经元，L2即输出层10个神经元。\n",
    "输入为手写数字图像\n",
    "输出为0-9的分类结果 \n",
    "\n",
    "对模型训练过程（梯度如何计算，参数如何更新）的理解。 \n",
    "梯度下降法，利用tf.train.GradientDescentOptimizer进行梯度的更新\n",
    "\n",
    "\n",
    "对计算图的理解。 \n",
    "Tensorflow是一个通过计算图的形式来表述计算的编程系统，计算图也叫数据流图，可以把计算图看做是一种有向图，Tensorflow中的每一个节点都是计算图上的一个Tensor, 也就是张量，而节点之间的边描述了计算之间的依赖关系(定义时)和数学操作(运算时)。Tensorflow计算的过程就是利用的Tensor来建立一个计算图，然后使用Session来启动计算，最后得到结果的过程。\n",
    "\n",
    "\n",
    "解释这⾥的模型为什么效果⽐较差。\n",
    "网络隐层层数较少，且没有添加正则项。\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
